/************************************************************************
 * Este archivo, representa la interfaz de creaión de un cliente
 * junto con las acciones asociadas a los eventos de cada componente
 * 
 * @system: veco-system
 * @description: Sistema de control vehicular
 * @version: 1.0
 * @Copyright © 2013 
 * 
 * @authores:
 * 
 *      > Alberione, Fernando    <falberione_037@gmail.com>
 * 
 *      > Boretto, Martin        <martinboretto@gmail.com>
 * 
 *      > Lenarduzzi, Federico   <fedeatenas@gmail.com>
 * 
 *      > Ocampo, Emanuel        <eocampo86@gmail.com>
 *
 *************************************************************************/
package Interfaces;

import SistemaCocheras.manejadorCliente;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.sql.Connection;
import javax.swing.JOptionPane;


public class nuevoCliente extends javax.swing.JFrame {

    private String campoDni = "";
    private String campoNombre = "";
    private String campoApellido = "";
    private int campoEdad = 0;
    private String campoDireccion = "";
    private String campoTelefono = "";
    private Boolean campoBotonDesc = false;
    private int campoDescuento = 0;
    private Connection conexion;
    private int tarifa;
    

    // ---------------------------------------------------------
    // ------- Seccion de constructores de la clase
    // ---------------------------------------------------------    

    /**
     * Constructor vacio 
     */
    public nuevoCliente() {
        initComponents();
        centrarJFrame();
    }// Fin constructor


    /**
     * Constructor NO vacio
     * @param con Representa la conexion de la base de datos
     */
    public nuevoCliente(Connection con) {
        this.conexion = con;
        initComponents();
        centrarJFrame();
    }// Fin constructor

    
    /**
     * Constructor NO vacio
     * @param con Representa la conexion de la base de datos
     * @param dueño Representa el DNI del nuevo cliente 
     */  
    public nuevoCliente(Connection con, String dueño) {
        this.conexion = con;
        initComponents();
        centrarJFrame();
        this.campoTextoDni.setText(dueño);
    }// Fin constructor

    
    // ---------------------------------------------------------
    // ------- Seccion de metodos publicos 
    // --------------------------------------------------------- 
    
    /**
     * Metodo encargado de levantar una instancia de la clase 
     * @param args 
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new nuevoCliente().setVisible(true);
            }
        });
    }// Fin main
    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        labelDni = new javax.swing.JLabel();
        campoTextoDni = new javax.swing.JTextField();
        labelNombre = new javax.swing.JLabel();
        campoTextoApellido = new javax.swing.JTextField();
        labelApellido = new javax.swing.JLabel();
        campoTextoEdad = new javax.swing.JTextField();
        labelEdad = new javax.swing.JLabel();
        campoTextoNombre = new javax.swing.JTextField();
        labelDireccion = new javax.swing.JLabel();
        campoTextoDireccion = new javax.swing.JTextField();
        labelTelefono = new javax.swing.JLabel();
        campoTextoTelefono = new javax.swing.JTextField();
        BotonAceptar = new javax.swing.JButton();
        labelTarifa = new javax.swing.JLabel();
        comboBoxTarifa = new javax.swing.JComboBox();
        campoTextoDescuento = new javax.swing.JTextField();
        checkBotonDescuento = new javax.swing.JCheckBox();
        BotonCancelar = new javax.swing.JButton();
        botonNuevoVehiculo = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("B&B - Nuevo cliente");
        setResizable(false);

        labelDni.setText("DNI (*):");

        labelNombre.setText("Nombre (*):");

        labelApellido.setText("Apellido (*):");

        labelEdad.setText("Edad:");

        labelDireccion.setText("Direccion:");

        labelTelefono.setText("Telefono:");

        BotonAceptar.setText("Aceptar");
        BotonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BotonAceptarActionPerformed(evt);
            }
        });

        labelTarifa.setText("Tarifa:");

        comboBoxTarifa.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Por Semana", "Por Quincena", "Por Mes" }));

        campoTextoDescuento.setText("0");
        campoTextoDescuento.setEnabled(false);

        checkBotonDescuento.setText("Descuento (%):");
        checkBotonDescuento.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                checkBotonDescuentoActionPerformed(evt);
            }
        });

        BotonCancelar.setText("Cancelar");
        BotonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BotonCancelarActionPerformed(evt);
            }
        });

        botonNuevoVehiculo.setText("Vehiculo Cliente");
        botonNuevoVehiculo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonNuevoVehiculoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addContainerGap()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(labelEdad)
                                    .addComponent(labelDni)
                                    .addComponent(labelTarifa)
                                    .addComponent(labelTelefono)
                                    .addComponent(labelDireccion))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(campoTextoDni, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(comboBoxTarifa, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addGap(18, 18, 18)
                                        .addComponent(checkBotonDescuento)
                                        .addGap(18, 18, 18)
                                        .addComponent(campoTextoDescuento, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addComponent(campoTextoDireccion)
                                    .addComponent(campoTextoTelefono, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE)
                                    .addComponent(campoTextoEdad)))
                            .addGroup(layout.createSequentialGroup()
                                .addGap(22, 22, 22)
                                .addComponent(BotonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addComponent(botonNuevoVehiculo)
                                .addGap(18, 18, 18)
                                .addComponent(BotonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(labelNombre, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(campoTextoNombre))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(labelApellido)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(campoTextoApellido)))))
                .addContainerGap())
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {BotonAceptar, BotonCancelar, botonNuevoVehiculo});

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {labelApellido, labelDni, labelEdad, labelNombre, labelTarifa, labelTelefono});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoTextoDni, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelDni))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoTextoNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelNombre))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoTextoApellido, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelApellido))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 3, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(labelEdad, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(campoTextoEdad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(campoTextoDireccion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(labelDireccion))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(campoTextoTelefono, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(labelTelefono))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 23, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(comboBoxTarifa, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(checkBotonDescuento)
                    .addComponent(campoTextoDescuento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelTarifa))
                .addGap(30, 30, 30)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(BotonAceptar)
                    .addComponent(botonNuevoVehiculo)
                    .addComponent(BotonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {BotonAceptar, BotonCancelar, botonNuevoVehiculo});

        layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {labelApellido, labelDireccion, labelDni, labelEdad, labelNombre, labelTarifa, labelTelefono});

        checkBotonDescuento.getAccessibleContext().setAccessibleParent(campoTextoDescuento);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    
    // ---------------------------------------------------------
    // ------- Seccion de metodos privados 
    // ---------------------------------------------------------    
    
    /**
     * Funcion encargada de centrar el dialogo en la pantalla
     */
    private void centrarJFrame(){
        Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frame = this.getSize();
        this.setLocation((pantalla.width-frame.width)/2, (pantalla.height-frame.height)/2);
    }// Fin centrarJFrame
   
   
    /**
     * Metodo encargado de realizar lo necesario (crear usuario) a 
     * traves del boton aceptar
     * @param evt Representa el evento del click
     */
    private void BotonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BotonAceptarActionPerformed
        manejadorCliente nuevoCliente = new manejadorCliente(this.conexion);
        this.campoDni = this.campoTextoDni.getText();                        // Informacion que se carga en el campo de texto "DNI"
        this.campoNombre = this.campoTextoNombre.getText();                  // Informacion que se carga en el campo de texto "NOMBRE"
        this.campoApellido = this.campoTextoApellido.getText();              // Informacion que se carga en el campo de texto "APELLIDO"
        if(this.campoTextoEdad.getText().compareTo("") != 0){
            this.campoEdad = Integer.parseInt(this.campoTextoEdad.getText());// Informacion que se carga en el campo de texto "EDAD"
        }
        this.campoDireccion = this.campoTextoDireccion.getText();            // Informacion que se carga en el campo de texto "DIRECCION"
        this.campoTelefono = this.campoTextoTelefono.getText();              // Informacion que se carga en el campo de texto "TELEFONO"
        this.campoBotonDesc = this.checkBotonDescuento.isSelected();
        this.tarifa = this.comboBoxTarifa.getSelectedIndex();
        if(this.campoTextoDescuento.getText().compareTo("") != 0){
            this.campoDescuento = Integer.parseInt(this.campoTextoDescuento.getText());
        }
        try{
            if((this.campoDni.compareTo("") != 0)&& !(nuevoCliente.buscarClientePorDni(this.campoDni).next())
              &&(this.campoNombre.compareTo("") != 0)&&(this.campoApellido.compareTo("") != 0)){
                if(this.campoBotonDesc &&(this.campoDescuento <= 100)&&(campoDescuento >= 0)){       // Control de campos vacios
                    nuevoCliente.insertarCliente(this.campoDni, this.campoNombre, this.campoApellido, this.campoEdad, this.campoDireccion, this.campoTelefono,
                                                 this.tarifa, this.campoBotonDesc, this.campoDescuento);
                    JOptionPane.showMessageDialog(null, "El cliente "+this.campoNombre+" "+this.campoApellido+" ha sido cargado satisfactoriamente en el sistema con un descuento de: "+ this.campoDescuento +"%", "Sistema de Cocheras B&B", JOptionPane.INFORMATION_MESSAGE);
                }
                else {
                    nuevoCliente.insertarCliente(this.campoDni, this.campoNombre, this.campoApellido, this.campoEdad, this.campoDireccion, this.campoTelefono,
                                                 this.tarifa, this.campoBotonDesc, this.campoDescuento);
                    JOptionPane.showMessageDialog(null, "El cliente "+this.campoNombre+" "+this.campoApellido+" ha sido cargado satisfactoriamente en el sistema", "Sistema de Cocheras B&B", JOptionPane.INFORMATION_MESSAGE);
                }
                nuevoCliente.this.dispose();
                nuevoVehiculo nv = new nuevoVehiculo(this.conexion, this.campoDni);
                nv.setVisible(true);

            }
            else{
               lanzarError();
            }
        }
        catch (Exception e){
            JOptionPane.showMessageDialog(null,"Ha ocurrido un error interno :"+ e, "Sistema de Cocheras B&B",JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_BotonAceptarActionPerformed

    
    /**
     * Metodo encargado de cerrar la interfaz a traves del boton cancelar
     * @param evt Representa el evento del click
     */
    private void BotonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BotonCancelarActionPerformed
        this.dispose();
    }//GEN-LAST:event_BotonCancelarActionPerformed

    
    /**
     * Metodo encargado de habilitar el campo descuento a cliente
     * @param evt Representa el evento del click
     */
    private void checkBotonDescuentoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkBotonDescuentoActionPerformed
        if (this.checkBotonDescuento.isSelected())
            this.campoTextoDescuento.setEnabled(true);
        else
            this.campoTextoDescuento.setEnabled(false);
    }//GEN-LAST:event_checkBotonDescuentoActionPerformed

    
// HACE LO MISMO QUE BOTON ACEPTAR!!!!!!!
    private void botonNuevoVehiculoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonNuevoVehiculoActionPerformed
        manejadorCliente nuevoCliente = new manejadorCliente(this.conexion);
        this.campoDni = this.campoTextoDni.getText();                        // Obtengo la informacion que se carga en el campo de texto "DNI"
        this.campoNombre = this.campoTextoNombre.getText();                  // Obtengo la informacion que se carga en el campo de texto "NOMBRE"
        this.campoApellido = this.campoTextoApellido.getText();              // Obtengo la informacion que se carga en el campo de texto "APELLIDO"
        if(this.campoTextoEdad.getText().compareTo("") != 0){
            this.campoEdad = Integer.parseInt(this.campoTextoEdad.getText());// Obtengo la informacion que se carga en el campo de texto "EDAD"
        }
        this.campoDireccion = this.campoTextoDireccion.getText();            // Obtengo la informacion que se carga en el campo de texto "DIRECCION"
        this.campoTelefono = this.campoTextoTelefono.getText();              // Obtengo la informacion que se carga en el campo de texto "TELEFONO"
        this.campoBotonDesc = this.checkBotonDescuento.isSelected();
        this.tarifa = this.comboBoxTarifa.getSelectedIndex();
        if(this.campoTextoDescuento.getText().compareTo("") != 0){
            this.campoDescuento = Integer.parseInt(this.campoTextoDescuento.getText());
        }
        try{
            if((this.campoDni.compareTo("") != 0)&& !(nuevoCliente.buscarClientePorDni(this.campoDni).next())
                    &&(this.campoNombre.compareTo("") != 0)&&(this.campoApellido.compareTo("") != 0)){
                if(this.campoBotonDesc &&(this.campoDescuento<=100)&&(this.campoDescuento>=0)){
                    nuevoCliente.insertarCliente(this.campoDni, this.campoNombre, this.campoApellido, this.campoEdad, this.campoDireccion, this.campoTelefono, this.tarifa,
                                                 this.campoBotonDesc, this.campoDescuento);
                    JOptionPane.showMessageDialog(null, "El cliente "+this.campoNombre+" "+this.campoApellido+" Ha sido cargado satisfactoriamente en el sistema con un descuento de: "+ this.campoDescuento +"%", "B&B - Ingreso Nuevo Cliente", JOptionPane.INFORMATION_MESSAGE);
                } else {
                    nuevoCliente.insertarCliente(this.campoDni, this.campoNombre, this.campoApellido, this.campoEdad, this.campoDireccion, this.campoTelefono, this.tarifa,
                                                 this.campoBotonDesc, this.campoDescuento);
                    JOptionPane.showMessageDialog(null, "El cliente "+this.campoNombre+" "+this.campoApellido+" Ha sido cargado satisfactoriamente en el sistema", "B&B - Ingreso Nuevo Cliente", JOptionPane.INFORMATION_MESSAGE);
                }
                nuevoCliente.this.dispose();
                nuevoVehiculo nv = new nuevoVehiculo(this.conexion, this.campoDni);
                nv.setVisible(true);
            } else{
                lanzarError();
            }
        } catch (Exception e){
            JOptionPane.showMessageDialog(null,"Ha ocurrido un error interno :"+ e, "B&B - Error Ingreso Nuevo Cliente",JOptionPane.ERROR_MESSAGE);
        }
}//GEN-LAST:event_botonNuevoVehiculoActionPerformed
   /**
    * Metodo encargado de mostrar la interfaz de error por campos vacios O erroneos
    */
    private void lanzarError(){
        JOptionPane.showMessageDialog(null, "Se deben rellenar correctamente todos los campos.", "B&B - Error Ingreso Nuevo Cliente",JOptionPane.ERROR_MESSAGE);
    }// Fin lanzarError


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton BotonAceptar;
    private javax.swing.JButton BotonCancelar;
    private javax.swing.JButton botonNuevoVehiculo;
    private javax.swing.JTextField campoTextoApellido;
    private javax.swing.JTextField campoTextoDescuento;
    private javax.swing.JTextField campoTextoDireccion;
    private javax.swing.JTextField campoTextoDni;
    private javax.swing.JTextField campoTextoEdad;
    private javax.swing.JTextField campoTextoNombre;
    private javax.swing.JTextField campoTextoTelefono;
    private javax.swing.JCheckBox checkBotonDescuento;
    private javax.swing.JComboBox comboBoxTarifa;
    private javax.swing.JLabel labelApellido;
    private javax.swing.JLabel labelDireccion;
    private javax.swing.JLabel labelDni;
    private javax.swing.JLabel labelEdad;
    private javax.swing.JLabel labelNombre;
    private javax.swing.JLabel labelTarifa;
    private javax.swing.JLabel labelTelefono;
    // End of variables declaration//GEN-END:variables

}// Fin clase nuevoCliente
